home *** CD-ROM | disk | FTP | other *** search
- #define PC(x) \
- ADDQ.W x,rPC
-
- #define NegSet(z) \
- BTST #7,z \
- BEQ @99 \
- BSET #bNEG,rFLAGS \
- @99
-
- #define FlagsNZ(z) \
- MOVE.B z,D0 \
- BSR doFlagsNZ
-
- #define ORA(x) \
- x(D1) \
- ByteAt(D1,D1) \
- OR.B D1,rA \
- FlagsNZ(rA)
-
- #define ASL(x) \
- x(D1) \
- ByteAt(D1,D0) \
- ANDI.B #0xff-(CAR|NEG|ZER),rFLAGS \
- BTST #7,D0 \
- BEQ @3 \
- BSET #bCAR,rFLAGS \
- @3 LSL.B #1,D0 \
- MOVE.B D0,(rRAM,D1.L) \
- NegSet(D0) \
- TST.B D0 \
- BNE @4 \
- BSET #bZER,rFLAGS \
- @4
-
- #define LSR(x) \
- x(D1) \
- ByteAt(D1,D0) \
- ANDI.B #0xff-(CAR|NEG|ZER),rFLAGS \
- BTST #0,D0 \
- BEQ @3 \
- BSET #bCAR,rFLAGS \
- @3 LSR.B #1,D0 \
- BNE @4 \
- BSET #bZER,rFLAGS \
- @4 MOVE.B D0,(rRAM,D1.L)
-
- #define BCL(x) \
- BTST x,rFLAGS \
- BEQ @3 \
- ADDQ.W #1,rPC \
- RTS \
- @3 ImmediateByte(D1) \
- ADDQ.W #1,rPC \
- BTST #7,D1 \
- BNE @4 \
- ADD.W D1,rPC \
- RTS \
- @4 EORI.W #0xFF,D1 \
- ADD.W #1,D1 \
- SUB.W D1,rPC
-
- #define BST(x) \
- BTST x,rFLAGS \
- BNE @3 \
- ADDQ.W #1,rPC \
- RTS \
- @3 ImmediateByte(D1) \
- ADDQ.W #1,rPC \
- BTST #7,D1 \
- BNE @4 \
- ADD.W D1,rPC \
- RTS \
- @4 EORI.W #0xFF,D1 \
- ADD.W #1,D1 \
- SUB.W D1,rPC
-
- #define CLR(x) \
- BCLR x,rFLAGS
- /*flags &=~x; return*/
-
- #define SET(x) \
- BSET x,rFLAGS
- /*flags |= x; return*/
-
- #define AND(x) \
- x(D1) \
- ByteAt(D1,D0) \
- AND.B D0,rA \
- FlagsNZ(rA)
- /*a &= ByteAt(x()); FlagsNZ(a)*/
-
- #define BIT(x) \
- x(D1) \
- ByteAt(D1,D1) \
- ANDI.B #0xFF-(ZER|NEG|OVF),rFLAGS \
- MOVE.B rA,D0 \
- AND.B D1,D0 \
- BNE @3 \
- BSET #bZER,rFLAGS \
- @3 ANDI.B #(NEG|OVF),D1 \
- OR.B D1,rFLAGS
-
- #define ROL(x) \
- x(D1) \
- ByteAt(D1,D0) \
- BTST #bCAR,rFLAGS \
- BEQ @3 \
- BTST #7,D0 \
- BNE @4 \
- BCLR #bCAR,rFLAGS \
- @4 LSL.B #1,D0 \
- OR.B #1,D0 \
- BRA @5 \
- @3 BTST #7,D0 \
- BEQ @6 \
- BSET #bCAR,rFLAGS \
- @6 LSL.B #1,D0 \
- @5 MOVE.B D0,(rRAM,D1.L) \
- FlagsNZ(D0)
-
- #define ROR(x) \
- x(D1) \
- ByteAt(D1,D0) \
- BTST #bCAR,rFLAGS \
- BEQ @3 \
- BTST #0,D0 \
- BNE @4 \
- BCLR #bCAR,rFLAGS \
- @4 LSR.B #1,D0 \
- OR.B #0x80,D0 \
- BRA @5 \
- @3 BTST #0,D0 \
- BEQ @6 \
- BSET #bCAR,rFLAGS \
- @6 LSR.B #1,D0 \
- @5 MOVE.B D0,(rRAM,D1.L) \
- FlagsNZ(D0)
-
- #define EOR(x) \
- x(D1) \
- ByteAt(D1,D1) \
- EOR.B D1,rA \
- FlagsNZ(rA)
- /*a^=ByteAt(x());FlagsNZ(a)*/
-
- #define STA(y) \
- y(D1) \
- MOVE.B rA,(rRAM,D1.L)
- /*RAM[x()]=a*/
-
- #define STY(x) \
- x(D1) \
- MOVE.B rY,(rRAM,D1.L)
- /*RAM[x()]=y*/
-
- #define STX(y) \
- y(D1) \
- MOVE.B rX,(rRAM,D1.L)
- /*RAM[y()]=x*/
-
- #define LDA(x) \
- x(D1) \
- ByteAt(D1,rA) \
- FlagsNZ(rA)
- /*a=ByteAt(x()); FlagsNZ(a)*/
-
- #define LDY(x) \
- x(D1) \
- ByteAt(D1,rY) \
- FlagsNZ(rY)
- /*y=ByteAt(x()); FlagsNZ(y)*/
-
- #define LDX(y) \
- y(D1) \
- ByteAt(D1,rX) \
- FlagsNZ(rX)
- /*x=ByteAt(y()); FlagsNZ(x)*/
-
- #define BCD2DEC(x) \
- LEA bcd2dec,A2 \
- MOVE.B (A2,x.W),x \
- ANDI.W #0x00FF,x
- /*((x&15)+((x&240)>>4)*10)*/
-
- #define DEC2BCD(x,y) \
- LEA dec2bcd,A2 \
- MOVE.B (A2,x.W),y \
- ANDI.W #0x00FF,y
- /*{ y=x/10; x -=y*10; y=(y<<4) +x;}*/
-
- #define ADC(x) \
- x(D1) \
- ByteAt(D1,D1) \
- ANDI.W #0x00FF,D1 \
- BTST #bDEC,rFLAGS \
- BNE @3 \
- ANDI.W #0x00FF,rA \
- ADD.W D1,rA \
- BTST #bCAR,rFLAGS \
- BEQ @7 \
- ADDQ.W #1,rA \
- @7 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
- CMPI.W #0x00FF,rA \
- BLE @8 \
- OR.B #(OVF|CAR),rFLAGS \
- @8 FlagsNZ(rA) \
- BRA @6 \
- @3 BCD2DEC(D1) \
- BCD2DEC(rA) \
- ADD.W D1,rA \
- BTST #bCAR,rFLAGS \
- BEQ @4 \
- ADDQ.W #1,rA \
- @4 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
- CMPI.W #99,rA \
- BLE @5 \
- OR.B #(CAR|OVF),rFLAGS \
- SUBI.W #100,rA \
- @5 FlagsNZ(rA) \
- DEC2BCD(rA,rA) \
- @6
-
- #define SBC(x) \
- x(D1) \
- ByteAt(D1,D1) \
- ANDI.W #0x00FF,D1 \
- BTST #bDEC,rFLAGS \
- BNE @3 \
- ANDI.W #0x00FF,rA \
- SUB.W D1,rA \
- BTST #bCAR,rFLAGS \
- BNE @7 \
- SUB.W #1,rA \
- @7 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
- TST.W rA \
- BNE @8 \
- OR.B #(ZER|CAR),rFLAGS \
- BRA @9 \
- @8 BMI @10 \
- BSET #bCAR,rFLAGS \
- BRA @9 \
- @10 BSET #bOVF,rFLAGS \
- @9 NegSet(rA) \
- BRA @6 \
- @3 BCD2DEC(D1) \
- BCD2DEC(rA) \
- SUB.W D1,rA \
- BTST #bCAR,rFLAGS \
- BNE @4 \
- SUB.W #1,rA \
- @4 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
- TST.W rA \
- BNE @5 \
- OR.B #(ZER|CAR),rFLAGS \
- BRA @11 \
- @5 BMI @12 \
- BSET #bCAR,rFLAGS \
- BRA @11 \
- @12 BSET #bNEG,rFLAGS \
- ADDI.W #100,rA \
- @11 DEC2BCD(rA,rA) \
- @6
-
- #define DECR(x) \
- x(D1) \
- ByteAt(D1,D0) \
- SUBQ.B #1,D0 \
- MOVE.B D0,(rRAM,D1.L) \
- FlagsNZ(D0)
-
- #define INCR(x) \
- x(D1) \
- ByteAt(D1,D0) \
- ADDQ.B #1,D0 \
- MOVE.B D0,(rRAM,D1.L) \
- FlagsNZ(D0)
-
- #define CPY(mode) CP(mode,rY)
- #define CPX(mode) CP(mode,rX)
- #define CMP(mode) CP(mode,rA)
-
- #define CP(mode,reg) \
- mode(D1) \
- ByteAt(D1,D1) \
- DOCP(reg)
-
- #define CPI(reg) \
- ImmediateByte(D1) \
- DOCP(reg)
-
- #define DOCP(reg) \
- ANDI.B #0xFF-(CAR|ZER|NEG),rFLAGS \
- CMP.B reg,D1 \
- BNE @3 \
- ORI.B #(CAR|ZER),rFLAGS \
- BRA @4 \
- @3: BCC @5 \
- BSET #bCAR,rFLAGS \
- BRA @4 \
- @5: BSET #bNEG,rFLAGS \
- @4
-